home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / CDUNGEON / !CDUNGEON / c / DSO7 < prev    next >
Text File  |  1991-05-20  |  3KB  |  165 lines

  1. /* ENCRYP--    ENCRYPT PASSWORD */
  2.  
  3. /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
  4. /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
  5. /* WRITTEN BY R. M. SUPNIK */
  6.  
  7. #include <stdio.h>
  8. #include "funcs.h"
  9. #include "vars.h"
  10.  
  11. void encryp_(inw, outw)
  12. const char *inw;
  13. char *outw;
  14. {
  15.     /* Initialized data */
  16.  
  17.     const char *keyw = "ECORMS";
  18.  
  19.     integer i, j, uinw[6], usum;
  20.     char ukeyw[1*6];
  21.     integer uinws, ukeyws;
  22.  
  23.     /* Parameter adjustments */
  24.     --outw;
  25.     --inw;
  26.  
  27.     /* Function Body */
  28.  
  29.     uinws = 0;
  30. /*                         !UNBIASED INW SUM. */
  31.     ukeyws = 0;
  32. /*                         !UNBIASED KEYW SUM. */
  33.     j = 1;
  34. /*                         !POINTER IN KEYWORD. */
  35.     for (i = 1; i <= 6; ++i) {
  36. /*                         !UNBIAS, COMPUTE SUMS. */
  37.     ukeyw[i - 1] = (keyw[i - 1] - 64);
  38.     if (inw[j] <= '@') {
  39.         j = 1;
  40.     }
  41.     uinw[i - 1] = inw[j] - 64;
  42.     ukeyws += ukeyw[i - 1];
  43.     uinws += uinw[i - 1];
  44.     ++j;
  45. /* L100: */
  46.     }
  47.  
  48.     usum = uinws % 8 + (ukeyws % 8 << 3);
  49. /*                         !COMPUTE MASK. */
  50.     for (i = 1; i <= 6; ++i) {
  51.     j = (uinw[i - 1] ^ ukeyw[i - 1] ^ usum) & 31;
  52.     usum = (usum + 1) % 32;
  53.     if (j > 26) {
  54.         j %= 26;
  55.     }
  56.     outw[i] = (max(1,j) + 64);
  57. /* L200: */
  58.     }
  59. } /* encryp_ */
  60.  
  61. /* CPGOTO--    MOVE TO NEXT STATE IN PUZZLE ROOM */
  62.  
  63. /* DECLARATIONS */
  64.  
  65. void cpgoto_(st)
  66. integer st;
  67. {
  68.     /* System generated locals */
  69.     integer i__1, i__2;
  70.  
  71.     /* Local variables */
  72.     integer i;
  73.  
  74.     rooms_1.rflag[rindex_1.cpuzz - 1] &= ~ RSEEN;
  75.     i__1 = objcts_1.olnt;
  76.     for (i = 1; i <= i__1; ++i) {
  77. /*                         !RELOCATE OBJECTS. */
  78.     if (objcts_1.oroom[i - 1] == rindex_1.cpuzz && (objcts_1.oflag2[i - 1]
  79.          & ACTRBT + VILLBT) == 0) {
  80.         i__2 = findex_1.cphere * hyper_1.hfactr;
  81.         newsta_(i, 0, i__2, 0, 0);
  82.     }
  83.     if (objcts_1.oroom[i - 1] == st * hyper_1.hfactr) {
  84.         newsta_(i, 0, rindex_1.cpuzz, 0, 0);
  85.     }
  86. /* L100: */
  87.     }
  88.     findex_1.cphere = st;
  89. } /* cpgoto_ */
  90.  
  91. /* CPINFO--    DESCRIBE PUZZLE ROOM */
  92.  
  93. /* DECLARATIONS */
  94.  
  95. void cpinfo_(rmk, st)
  96. integer rmk;
  97. integer st;
  98. {
  99.     /* Initialized data */
  100.  
  101.     static const integer dgmoft[8] = { -9,-8,-7,-1,1,7,8,9 };
  102.     const char *pict = "SSS M";
  103.  
  104.     /* Local variables */
  105.     integer i, j, k, l;
  106.     char dgm[1*8];
  107.  
  108.     rspeak_(rmk);
  109.     for (i = 1; i <= 8; ++i) {
  110.     j = dgmoft[i - 1];
  111.     dgm[i - 1] = pict[puzzle_1.cpvec[st + j - 1] + 3];
  112. /*                         !GET PICTURE ELEMENT. */
  113.     if (abs(j) == 1 || abs(j) == 8) {
  114.         goto L100;
  115.     }
  116.     k = 8;
  117.     if (j < 0) {
  118.         k = -8;
  119.     }
  120. /*                         !GET ORTHO DIR. */
  121.     l = j - k;
  122.     if (puzzle_1.cpvec[st + k - 1] != 0 && puzzle_1.cpvec[st + l - 1] !=
  123.          0) {
  124.         dgm[i - 1] = '?';
  125.     }
  126. L100:
  127.     ;
  128.     }
  129.  
  130.     more_output(NULL);
  131.     printf("       |%c%c %c%c %c%c|\n", dgm[0], dgm[0], dgm[1], dgm[1],
  132.                     dgm[2], dgm[2]);
  133.     more_output(NULL);
  134.     printf(" West  |%c%c .. %c%c| East\n", dgm[3], dgm[3], dgm[4], dgm[4]);
  135.     more_output(NULL);
  136.     printf("       |%c%c %c%c %c%c|\n", dgm[5], dgm[5], dgm[6], dgm[6],
  137.                     dgm[7], dgm[7]);
  138.  
  139.     if (st == 10) {
  140.     rspeak_(870);
  141.     }
  142. /*                         !AT HOLE? */
  143.     if (st == 37) {
  144.     rspeak_(871);
  145.     }
  146. /*                         !AT NICHE? */
  147.     i = 872;
  148. /*                         !DOOR OPEN? */
  149.     if (findex_1.cpoutf) {
  150.     i = 873;
  151.     }
  152.     if (st == 52) {
  153.     rspeak_(i);
  154.     }
  155. /*                         !AT DOOR? */
  156.     if (puzzle_1.cpvec[st] == -2) {
  157.     rspeak_(874);
  158.     }
  159. /*                         !EAST LADDER? */
  160.     if (puzzle_1.cpvec[st - 2] == -3) {
  161.     rspeak_(875);
  162.     }
  163. /*                         !WEST LADDER? */
  164. } /* cpinfo_ */
  165.